<template>
  <hr>
  <div>
    testTS测试专用
  </div>
  <hr>
</template>

<script lang='ts' setup>
import {ref, reactive} from 'vue'

// promise 函数 的测试 
// const newdata = new Promise((resolve,reject)=>{
//   setTimeout(()=>{
//     resolve(123)
//   },3000)
// })
// newdata.then((res)=>{
//   console.log(res)
// })

// 对象类型的数据 输出测试
// function hello() {
//   let web: string = "Hello World";
//   console.log(web);
// }
// hello();

// const obj = reactive<Object>({
//   name: 'xiaohu',
//   age: 18
// })
// console.log(obj)

// function BetterNumber(One: number, Two: number): Number{
//   return One + Two
// }
// const bet = BetterNumber(1, 2)
// console.log(bet)

// 代码会使 页面报错，无法继续加载
// function errorFuntion(): never {
//     throw new Error('运行错误，程序停止');
//     console.log("Hello World");
// }

// 各种类型的 数组 定义
// const arr1: number[] = [1,2,3]
// const arr2: (number | string)[] = [1, "string", 2];
// const arr3: {name: string, age: number}[] = [
//   {name: 'xioahu', age: 18}
// ]
// type lady = {name: string, age: number};
// const GoodxiaoJieJiesDemo6: lady[] = [
//   {name: "Ming", age: 15},
// ];

// 元组
// const Shuzu_xiaojiejie: [string, string, number] = ["Qwq", "NoJob", 28];   //每个位置的上的 数据 都被固定了

// 函数的定义   用接口定义函数的形状
// interface SearchFunc {
//   (source: string, subString: string): boolean;
// }
// let mySearch: SearchFunc
// mySearch = function(source: string, subString: string) {
//   return source.search(subString) !== -1;
// }
// const res = mySearch('name','name')
// console.log(res)

// 剩余参数
// function push1(array: any[], ...items: any[]) {
//     items.forEach(function(item) {
//         array.push(item);
//     });
// }
// let resa:any[] = [];
// push1(resa, 1, 2, 3, 'xiaohu666');
// console.log(resa)

// 重载
// function reverse(x: number | string): number | string | void {
//     if (typeof x === 'number') {
//         return Number(x.toString().split('').reverse().join(''));
//     } else if (typeof x === 'string') {
//         return x.split('').reverse().join('');
//     }
// }
// let res = reverse('chifan')
// console.log(res)
// console.log('number121312'.toString().split('').reverse().join('')) //将字符串转换成string类型，切片，反转，转字符类型

// function reverse(x: number): number;
// function reverse(x: string): string;
// function reverse(x: number | string): number | string | void {
//   if (typeof x === 'number') {
//       return Number(x.toString().split('').reverse().join(''));
//   } else if (typeof x === 'string') {
//       return x.split('').reverse().join('');
//   }
// }

// 联合类型断言
// interface Cat {
//   name: string;
//   run(): void;
// }
// interface Fish {
//   name: string;
//   swim(): void;
// }

// function getName(animal: Cat | Fish) {
//   return animal.name;
// }
// const animal = reactive({
//   name:'xioahu',
//   // run(): null
// })
// getName(animal)

//  作为as 断言，只能够「欺骗」TypeScript 编译器，无法避免运行时的错误
// function swim(animal: Cat | Fish) {
//     (animal as Fish).swim();
// }

// const tom: Cat = {
//     name: 'Tom',
//     run() { console.log('run') }
// };
// swim(tom);

interface Animal {
    name: string;
}
interface Cat {
    name: string;
    run(): void;
}

let tom: Cat = {
    name: 'Tom',
    run: () => { console.log('run') }
};
console.log(tom)
let animal: Animal = tom;
console.log(animal)

</script>

<style scoped>
</style>
